﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI;
using System.Web.UI.WebControls;
using PortalCurriculo.Domain;
using PortalCurriculo.WebUI.Helpers;

namespace PortalCurriculo.WebUI.Selecionadores
{
    public partial class CadastroQuestionario : RecruiterAccessHelper
    {
        private static List<Questionario> Questionarios { get; set; }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack) return;

            Questionarios = new Questionario().SelecionarPorEmpresa(EmpresasSelecionadorLogado);
            PreencherListView();
        }

        protected void lsvQuestionario_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
            var item = (ListViewDataItem)e.Item;
            var questionario = (Questionario)item.DataItem;

            ((Label)item.FindControl("lblNome")).Text = questionario.Nome;
            ((Label)item.FindControl("lblNomeDisplay")).Text = questionario.NomeDisplay ?? string.Empty;
            ((Label)item.FindControl("lblDescricao")).Text = questionario.Descricao ?? string.Empty;
            ((Label)item.FindControl("lblQuantidadePerguntas")).Text = questionario.Questaos.Count.ToString();

            int? tempoTotal = questionario.Tempo ?? questionario.Questaos.Sum(questao => questao.Tempo);
            if (tempoTotal.HasValue)
                ((Label)item.FindControl("lblTempoTotal")).Text = TimeHelper.ConverterMinutos(tempoTotal.Value,
                                                                                               AppRelativeVirtualPath);

            ((ImageButton)item.FindControl("imbExcluir")).Attributes.Add("Id", questionario.Id.ToString());
        }

        protected void imbExcluir_Click(object sender, ImageClickEventArgs e)
        {
            int id = int.Parse(((ImageButton)sender).Attributes["Id"]);

            Questionario questionario = (from linq in Questionarios
                                         where linq.Id.Equals(id)
                                         select linq).First();

            questionario.Inative();

            Questionarios.Remove(questionario);
            PreencherListView();
        }

        private void PreencherListView()
        {
            lsvQuestionario.DataSource = Questionarios;
            lsvQuestionario.DataBind();
        }

        protected void lnkAdicionar_Click(object sender, EventArgs e)
        {
            Popup.Show();
            LimparCampos();
            if(ddlEmpresa.Items.Count.Equals(0)) PreencherEmpresas();
        }

        private void LimparCampos()
        {
            Popup.ClearFields();
            txtTempo.Value = 0;
            txtNomeExterno.Value = string.Empty;
            txtNomeInterno.Value = string.Empty;
            rdoIndeterminado.Checked = true;
        }

        protected void lnkSalvar_Click(object sender, EventArgs e)
        {
            var questionario = new Questionario
                                   {
                                       Ativo = true,
                                       DataExpiracao = DateTime.Now.AddYears(10),
                                       Descricao = txtDescricao.Text,
                                       IdEmpresa = int.Parse(ddlEmpresa.SelectedValue),
                                       Nome = txtNomeInterno.Value,
                                       NomeDisplay = txtNomeExterno.Value,
                                       Tempo =
                                           rdoIndeterminado.Checked
                                               ? 0
                                               : rdoDefinido.Checked ? txtTempo.Value : (int?)null
                                   };

            questionario.Save();
            Questionarios.Add(questionario);
            PreencherListView();
            Popup.Close();
        }

        protected void lnkCancelar_Click(object sender, EventArgs e)
        {
            Popup.Close();
        }

        private void PreencherEmpresas()
        {
            var empresas =
                (from empresa in EmpresasSelecionadorLogado
                 select new
                            {
                                empresa.Id,
                                Descricao = empresa.Usuario.Pessoa.PessoaJuridica.NomeFantasia
                            });

            WebHelper.FillDropDownList(ddlEmpresa, empresas, false);
        }
    }
}